<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<meta http-equiv="Cache-Control" content="no-siteapp" />

    <title>xmake v2.5.5 released, Support to download and install precompiled image packages</title>
    <meta name="description" content="xmake is a lightweight cross-platform build tool based on Lua. It uses xmake.lua to maintain project builds. Compared with makefile/CMakeLists.txt, the confi...">

    
    <meta name="keywords" content="xmake,lua,C/C++,mirror,package,tboox" /> 

    <!-- qq oauth -->
    <meta property="qc:admins" content="5211601217706727767255" />

    <!--icon -->
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" sizes="192x192" href="/static/img/nice-highres.png" />
	<link rel="apple-touch-icon-precomposed" href="/static/img/apple-touch-icon-57x57-precomposed.png" />
	<link rel="apple-touch-icon-precomposed" sizes="72x72" href="/static/img/apple-touch-icon-72x72-precomposed.png" />
	<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/static/img/apple-touch-icon-114x114-precomposed.png" />
	<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/static/img/apple-touch-icon-144x144-precomposed.png" />
	<link rel="apple-touch-icon-precomposed" sizes="180x180" href="/static/img/retinahd_icon.png" />
	<meta name="msapplication-TileImage" content="/static/img/retinahd_icon.png" />
	
    <link rel="stylesheet" href=" /css/fontawesome/css/font-awesome.min.css ">
    <link rel="stylesheet" href=" /css/main.css ">
    <link rel="canonical" href="https://tboox.org/2021/06/30/xmake-update-v2.5.5/">
    <link rel="alternate" type="application/rss+xml" title="TBOOX Open Source Project" href="https://tboox.org/feed.xml ">
    <link rel="alternate" hreflang="en" href="https://tboox.org/" />
    <link rel="alternate" hreflang="zh-Hans" href="https://tboox.org/cn/" />




    <script type="text/javascript">
    function isPC(){    
        var userAgentInfo = navigator.userAgent;  
        var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");    
        var flag = true;    
        for (var v = 0; v < Agents.length; v++) {    
            if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; }    
        }    
        return flag;    
    }
    </script>

<!-- baidu ads -->



    <!-- baidu ads -->

</head>


  <body>

    <header id="top">
    <div class="wrapper">
        <a href="/" class="brand">TBOOX</a>
        <button id="headerMenu" class="menu"><i class="fa fa-bars"></i></button>
        <nav id="headerNav">
            <ul>
                <li>
                    
                    <a href="/cn?lang=0">
                    
                        <i class="fa fa-home"></i>中文
                    </a>
                </li>

                
                    
                     
                    
                
                    
                     
                     
                    <li>

                        
                            
                            <a href="/project/">
                            
                        
                            <i class="fa fa-bookmark"></i>Projects
                        </a>
                    </li>
                    
                    
                    
                
                    
                     
                    
                
                    
                     
                     
                    <li>

                        
                            
                            <a href="/archive/">
                            
                        
                            <i class="fa fa-archive"></i>Archives
                        </a>
                    </li>
                    
                    
                    
                
                    
                     
                    
                
                    
                     
                     
                    <li>

                        
                            
                            <a href="/category/">
                            
                        
                            <i class="fa fa-th-list"></i>Categories
                        </a>
                    </li>
                    
                    
                    
                
                    
                     
                    
                
                    
                     
                     
                    <li>

                        
                            
                            <a href="/tag/">
                            
                        
                            <i class="fa fa-tags"></i>Tags
                        </a>
                    </li>
                    
                    
                    
                
                    
                
                    
                     
                    
                
                    
                     
                     
                    <li>

                        
                            
                            <a href="/docs/">
                            
                        
                            <i class="fa fa-book"></i>Documents
                        </a>
                    </li>
                    
                    
                    
                
                    
                     
                    
                
                    
                     
                     
                    <li>

                        
                            
                            <a href="https://xmake.io/#/about/contact" target="_blank" >
                            
                        
                            <i class="fa fa-forumbee"></i>Community
                        </a>
                    </li>
                    
                    
                    
                
                    
                     
                    
                
                    
                     
                     
                    <li>

                        
                            
                            <a href="/donation/">
                            
                        
                            <i class="fa fa-heart"></i>Donate
                        </a>
                    </li>
                    
                    
                    
                
                    
                     
                    
                
                    
                     
                     
                    <li>

                        
                            
                            <a href="/about/">
                            
                        
                            <i class="fa fa-user"></i>About
                        </a>
                    </li>
                    
                    
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                     
                     
                    
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
                    
                
            </ul>
        </nav>
    </div>
</header>



        <div class="page clearfix" post>
    <div class="left">
        <h1>xmake v2.5.5 released, Support to download and install precompiled image packages</h1>
        <div class="label">

            <div class="label-card">
                <i class="fa fa-calendar"></i>2021-06-30
            </div>

            <div class="label-card">
                
            </div>

            <div class="label-card">
                
            </div>

            <div class="label-card">
            


<!-- <span class="point">•</span> -->
<span class="categories">
  <i class="fa fa-th-list"></i>
  
    
        <a href="/category/#xmake" title="Category: xmake" rel="category">xmake</a>
    
  

  <!-- <span class="point">•</span> -->
</span>


            </div>

            <div class="label-card">
            
<!-- <span class="point">•</span> -->
<span class="pageTag">
  <i class="fa fa-tags"></i>
  
    
        <!--a href="/tag/#xmake" title="Tag: xmake" rel="tag">xmake</a-->
        <a href="/tag/#xmake" title="Tag: xmake" rel="tag">xmake</a>&nbsp;
    
        <!--a href="/tag/#lua" title="Tag: lua" rel="tag">lua</a-->
        <a href="/tag/#lua" title="Tag: lua" rel="tag">lua</a>&nbsp;
    
        <!--a href="/tag/#C%2FC%2B%2B" title="Tag: C/C++" rel="tag">C/C++</a-->
        <a href="/tag/#C/C++" title="Tag: C/C++" rel="tag">C/C++</a>&nbsp;
    
        <!--a href="/tag/#mirror" title="Tag: mirror" rel="tag">mirror</a-->
        <a href="/tag/#mirror" title="Tag: mirror" rel="tag">mirror</a>&nbsp;
    
        <!--a href="/tag/#package" title="Tag: package" rel="tag">package</a-->
        <a href="/tag/#package" title="Tag: package" rel="tag">package</a>
    
  

</span>

            </div>

        </div>
        <hr>
        <article itemscope itemtype="http://schema.org/BlogPosting">
        <p><a href="https://github.com/xmake-io/xmake">xmake</a> is a lightweight cross-platform build tool based on Lua. It uses xmake.lua to maintain project builds. Compared with makefile/CMakeLists.txt, the configuration syntax is more Concise and intuitive, it is very friendly to novices, and you can get started quickly in a short time, allowing users to focus more on actual project development.</p>

<p>In version 2.5.5, we continue to improve the experience of remote package integration, realize the pre-compiled package in the cloud, and then directly download the integrated pre-compiled binary package. This can greatly reduce the installation time of some packages that are very slow to compile.</p>

<p>In addition, in the new version, we have also re-implemented the new version of the local package generation scheme, which fully supports <code class="highlighter-rouge">add_requires</code> and <code class="highlighter-rouge">add_packages</code> seamlessly. From then on, remote packages and local packages can be maintained in a unified way.</p>

<ul>
  <li><a href="https://github.com/xmake-io/xmake">Github</a></li>
  <li><a href="https://xmake.io/">Document</a></li>
</ul>

<h2 id="new-feature-introduction">New feature introduction</h2>

<h3 id="download-and-install-the-pre-compiled-package">Download and install the pre-compiled package</h3>

<p>Each time you install a package by the built-in package manager of xmake, you must download the corresponding package source code, and then perform local compilation and installation integration. This is for some large packages that compile very slowly, and some packages that rely on a lot of compilation tools. It will be very slow.</p>

<p>Especially on windows, not only the dependence of the third party package on the compilation environment is more complicated, but also many packages and compilation are very slow, such as boost, openssl and so on.</p>

<p>To this end, we implement cloud pre-compilation of packages based on github action, and pre-compile all commonly used packages, and then store them in <a href="https://github.com/xmake-mirror/build- artifacts">build-artifacts</a> under Releases of the repository.</p>

<p>Then, when we install the package, we will automatically download it from the binary image package source to achieve rapid integration (currently only pre-compiled windows packages are supported, and will be gradually released to other platforms in the future).</p>

<p>We will pre-compile various configuration combinations such as plat/arch/MT/MD/static/shared of each package, and accurately pull the packages that users actually need according to the unique buildhash. All compiled products will be compressed and packaged with 7zip, as follows Picture:</p>

<p><img src="/static/img/xmake/build-artifacts.png" alt="" /></p>

<h4 id="configure-mirror-source-to-accelerate-download">Configure mirror source to accelerate download</h4>

<p>Since our pre-compiled products are all placed on github, for Chinese users, considering that access to github is not very stable, we can also use the xmake mirror proxy function to automatically switch the actual download to fastgit and other mirror sites to speed up the download.</p>

<p>We can configure mirror proxy rules through a pac.lua file, for example, access to all github.com domain names is switched to the hub.fastgit.org domain name to speed up downloading packages.</p>

<p>pac.lua configuration:</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="k">function</span> <span class="nf">mirror</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
     <span class="k">return</span> <span class="n">url</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"github.com"</span><span class="p">,</span> <span class="s2">"hub.fastgit.org"</span><span class="p">)</span>
<span class="k">end</span>
</code></pre>
</div>

<p>Then we set this pac.lua file, the default path is <code class="highlighter-rouge">~/.xmake/pac.lua</code>, or you can manually configure pac.lua using the specified location.</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> g --proxy_pac=/tmp/pac.lua
</span></code></pre>
</div>

<p>Then, when we install the package, if we encounter the package source under the github.com domain name, it will automatically switch to the fastgit mirror to accelerate the download when downloading.</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xrepo</span><span class="kv"> install libpng
</span>&gt; curl https://hub.fastgit.org/glennrp/libpng/archive/v1.6.37.zip -o v1.6.37.zip
</code></pre>
</div>

<p>Therefore, all downloads of pre-compiled products will also be speeded up. Of course, more than Fastgit provides github mirror acceleration in China, and users can also switch to other mirror sources, such as cnpmjs.org and so on.</p>

<h4 id="how-to-trigger-cloud-pre-compilation">How to trigger cloud pre-compilation</h4>

<p>By default, xmake will not actively perform cloud pre-compilation and caching of all packages, which is too time-consuming and labor-intensive. Currently, only the pr is submitted to <a href="https://github.com/xmake-io/xmake- repo">xmake-repo</a> The official package repository, when a new package is included or the package version is updated, the cloud pre-compilation behavior of the corresponding package will be automatically triggered.</p>

<p>Therefore, if users want to contribute packages to our warehouse, they can basically be precompiled and cached (except for headeronly libraries), and if users do not want to contribute packages, but also want to get the precompilation acceleration of the corresponding package, it is also possible.</p>

<p>Just submit pr to the build branch of the <a href="https://github.com/xmake-mirror/build-artifacts">build-artifacts</a> repository, edit <a href="https://github.com/xmake-mirror /build-artifacts/blob/build/build.txt">build.txt</a> file, just modify the package name and version list that needs to trigger pre-compilation, for example:</p>

<p>build.txt</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="p">{</span>
    <span class="n">name</span> <span class="o">=</span> <span class="s2">"asmjit"</span><span class="p">,</span>
    <span class="n">versions</span> <span class="o">=</span> <span class="p">{</span>
        <span class="s2">"2021.06.27"</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre>
</div>

<p>As long as pr is merged, it will automatically trigger the pre-compilation behavior, and then generate the final compilation product to releases.</p>

<h4 id="mandatory-source-code-compilation-and-installation">Mandatory source code compilation and installation</h4>

<p>Although we provide a pre-compilation, download and installation method, if users still want to compile and install from source code, we can also manually pass in the <code class="highlighter-rouge">--build</code> parameter to the xrepo command to force switch to source code compilation and installation mode.</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xrepo</span><span class="kv"> install --build openssl
</span></code></pre>
</div>

<p>In xmake.lua, we can also support source code compilation and installation.</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">add_requires</span><span class="p">(</span><span class="s2">"openssl"</span><span class="p">,</span> <span class="p">{</span><span class="n">build</span> <span class="o">=</span> <span class="kc">true</span><span class="p">})</span>
</code></pre>
</div>

<p>If it is not specified, then xmake will automatically try to download and install the precompiled package first.</p>

<h4 id="add-a-private-pre-compiled-package-warehouse">Add a private pre-compiled package warehouse</h4>

<p>Our official pre-compiled package repository is at: <a href="https://github.com/xmake-mirror/build-artifacts">build-artifacts</a>.</p>

<p>Similarly, we can also configure and add our own pre-compiled warehouse, the way to add is similar:</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> repo --add local-repo git@github.com:xmake-mirror/myrepo-artifacts.git
</span></code></pre>
</div>

<p>You can also add in xmake.lua:</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">add_repositories</span><span class="p">(</span><span class="s2">"local-repo git@github.com:xmake-mirror/myrepo-artifacts.git"</span><span class="p">)</span>
</code></pre>
</div>

<h3 id="new-version-of-the-land-package-plan">New version of the land package plan</h3>

<h4 id="default-packaging-format">Default packaging format</h4>

<p>In the new version, we provide a new local package packaging solution that will seamlessly connect <code class="highlighter-rouge">add_requires</code> and <code class="highlighter-rouge">add_packages</code>.</p>

<p>We can execute the <code class="highlighter-rouge">xmake package</code> command to generate the default new version of the packaging format.</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> package
</span>package(foo): build/packages/f/foo generated
</code></pre>
</div>

<p>It will generate the file <code class="highlighter-rouge">build/packages/f/foo/xmake.lua</code> with the following content:</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">package</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">)</span>
    <span class="n">set_description</span><span class="p">(</span><span class="s2">"The foo package"</span><span class="p">)</span>
    <span class="n">set_license</span><span class="p">(</span><span class="s2">"Apache-2.0"</span><span class="p">)</span>
    <span class="n">add_deps</span><span class="p">(</span><span class="s2">"add"</span><span class="p">,</span> <span class="s2">"sub"</span><span class="p">)</span>

    <span class="n">on_load</span><span class="p">(</span><span class="k">function</span> <span class="p">(</span><span class="n">package</span><span class="p">)</span>
        <span class="n">package</span><span class="p">:</span><span class="n">set</span><span class="p">(</span><span class="s2">"installdir"</span><span class="p">,</span> <span class="n">path</span><span class="p">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="p">.</span><span class="n">scriptdir</span><span class="p">(),</span> <span class="n">package</span><span class="p">:</span><span class="n">plat</span><span class="p">(),</span> <span class="n">package</span><span class="p">:</span><span class="n">arch</span><span class="p">(),</span> <span class="n">package</span><span class="p">:</span><span class="n">mode</span><span class="p">()))</span>
    <span class="k">end</span><span class="p">)</span>

    <span class="n">on_fetch</span><span class="p">(</span><span class="k">function</span> <span class="p">(</span><span class="n">package</span><span class="p">)</span>
        <span class="kd">local</span> <span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="n">result</span><span class="p">.</span><span class="n">links</span> <span class="o">=</span> <span class="s2">"foo"</span>
        <span class="n">result</span><span class="p">.</span><span class="n">linkdirs</span> <span class="o">=</span> <span class="n">package</span><span class="p">:</span><span class="n">installdir</span><span class="p">(</span><span class="s2">"lib"</span><span class="p">)</span>
        <span class="n">result</span><span class="p">.</span><span class="n">includedirs</span> <span class="o">=</span> <span class="n">package</span><span class="p">:</span><span class="n">installdir</span><span class="p">(</span><span class="s2">"include"</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">result</span>
    <span class="k">end</span><span class="p">)</span>
</code></pre>
</div>

<p>In fact, it uses <code class="highlighter-rouge">package()</code> to define and describe local packages, just like remote packages.</p>

<p>The generated directory structure is as follows:</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">tree</span><span class="kv"> build/packages/f/foo/
</span>build/packages/f/foo/
├── macosx
│ └── x86_64
│ └── release
│ ├── include
│ │ └── foo.h
│ └── lib
│ └── libfoo.a
└── xmake.lua
</code></pre>
</div>

<p>We can also use the <code class="highlighter-rouge">add_requires</code>/<code class="highlighter-rouge">add_repositories</code> interface to seamlessly integrate this package.</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">add_rules</span><span class="p">(</span><span class="s2">"mode.debug"</span><span class="p">,</span> <span class="s2">"mode.release"</span><span class="p">)</span>

<span class="n">add_repositories</span><span class="p">(</span><span class="s2">"local-repo build"</span><span class="p">)</span>
<span class="n">add_requires</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">)</span>

<span class="n">target</span><span class="p">(</span><span class="s2">"bar"</span><span class="p">)</span>
    <span class="n">set_kind</span><span class="p">(</span><span class="s2">"binary"</span><span class="p">)</span>
    <span class="n">add_files</span><span class="p">(</span><span class="s2">"src/*.cpp"</span><span class="p">)</span>
    <span class="n">add_packages</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">)</span>
</code></pre>
</div>

<p>Among them, the <code class="highlighter-rouge">add_repositories</code> configuration specifies the warehouse root directory of the local package, and then this package can be referenced through <code class="highlighter-rouge">add_requires</code>.</p>

<p>In addition, the generated local package has another feature, which is to support <code class="highlighter-rouge">target/add_deps</code>, which automatically associates the dependencies of multiple packages, and automatically connects all dependency links during integration.</p>

<p>Here is the complete <a href="https://github.com/xmake-io/xmake/blob/dev/tests/actions/package/localpkg/test.lua">test example</a>.</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code>"/usr/bin/xcrun -sdk macosx clang++" -o build/macosx/x86_64/release/bar build/.objs/bar/macosx/x86_64/release/src/main.cpp.o -arch x86_64 -mmacosx-version -min=10.15 -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -stdlib=libc++
 -L/Users/ruki/projects/personal/xmake/tests/actions/package/localpkg/bar/build/packages/f/foo/macosx/x86_64/release/lib
 -L/Users/ruki/projects/personal/xmake/tests/actions/package/localpkg/bar/build/packages/s/sub/macosx/x86_64/release/lib
 -L/Users/ruki/projects/personal/xmake/tests/actions/package/localpkg/bar/build/packages/a/add/macosx/x86_64/release/lib
 -Wl,-x -lfoo -lsub -ladd -lz
</code></pre>
</div>

<p>Note: The previous old version of the local packaging format is an early product and will still be retained, but it is not recommended to continue to use. If you want to continue to use it, you can execute the following command to package:</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> package -f oldpkg
</span></code></pre>
</div>

<h4 id="generate-remote-package">Generate remote package</h4>

<p>In addition to the local package format, <code class="highlighter-rouge">xmake package</code> now also supports generating remote packages, so that users can quickly submit them to remote warehouses.</p>

<p>We only need to modify the package format when packaging.</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> package -f remote
</span></code></pre>
</div>

<p>He will also generate packages/f/foo/xmake.lua file.</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">package</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">)</span>
    <span class="n">set_description</span><span class="p">(</span><span class="s2">"The foo package"</span><span class="p">)</span>
    <span class="n">set_license</span><span class="p">(</span><span class="s2">"Apache-2.0"</span><span class="p">)</span>
    <span class="n">add_deps</span><span class="p">(</span><span class="s2">"add"</span><span class="p">,</span> <span class="s2">"sub"</span><span class="p">)</span>

    <span class="n">add_urls</span><span class="p">(</span><span class="s2">"https://github.com/myrepo/foo.git"</span><span class="p">)</span>
    <span class="n">add_versions</span><span class="p">(</span><span class="s2">"1.0"</span><span class="p">,</span> <span class="s2">"&lt;shasum256 or gitcommit&gt;"</span><span class="p">)</span>

    <span class="n">on_install</span><span class="p">(</span><span class="k">function</span> <span class="p">(</span><span class="n">package</span><span class="p">)</span>
        <span class="kd">local</span> <span class="n">configs</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">if</span> <span class="n">package</span><span class="p">:</span><span class="n">config</span><span class="p">(</span><span class="s2">"shared"</span><span class="p">)</span> <span class="k">then</span>
            <span class="n">configs</span><span class="p">.</span><span class="n">kind</span> <span class="o">=</span> <span class="s2">"shared"</span>
        <span class="k">end</span>
        <span class="n">import</span><span class="p">(</span><span class="s2">"package.tools.xmake"</span><span class="p">).</span><span class="n">install</span><span class="p">(</span><span class="n">package</span><span class="p">,</span> <span class="n">configs</span><span class="p">)</span>
    <span class="k">end</span><span class="p">)</span>

    <span class="n">on_test</span><span class="p">(</span><span class="k">function</span> <span class="p">(</span><span class="n">package</span><span class="p">)</span>
        <span class="o">-</span> <span class="n">TODO</span> <span class="n">check</span> <span class="n">includes</span> <span class="ow">and</span> <span class="n">interfaces</span>
        <span class="o">-</span> <span class="nb">assert</span><span class="p">(</span><span class="n">package</span><span class="p">:</span><span class="n">has_cfuncs</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">,</span> <span class="p">{</span><span class="n">includes</span> <span class="o">=</span> <span class="s2">"foo.h"</span><span class="p">})</span>
    <span class="k">end</span><span class="p">)</span>
</code></pre>
</div>

<p>Compared with the local package, the package definition configuration has more actual installation logic, as well as the settings of urls and versions,</p>

<p>We can also modify urls, versions and other configuration values through additional parameters, for example:</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> package -f remote --url=https://xxxx/xxx.tar.gz --shasum=xxxxx --homepage=xxxxx`
</span></code></pre>
</div>

<p>xmake will also read the relevant configuration information from the target’s <code class="highlighter-rouge">set_license</code> and <code class="highlighter-rouge">set_version</code> configurations.</p>

<h3 id="search-for-packages-from-third-party-warehouses">Search for packages from third-party warehouses</h3>

<p>The built-in xrepo package manager command of xmake previously supported searching the built-in packages in the xmake-repo repository.</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xrepo</span><span class="kv"> search zlib "pcr*"
</span>    zlib:
      -&gt; zlib: A Massively Spiffy Yet Delicately Unobtrusive Compression Library (in xmake-repo)
    pcr*:
      -&gt; pcre2: A Perl Compatible Regular Expressions Library (in xmake-repo)
      -&gt; pcre: A Perl Compatible Regular Expressions Library (in xmake-repo)
</code></pre>
</div>

<p>And now, we can also search for their packages from third-party package managers such as vcpkg, conan, conda and apt, just add the corresponding package namespace, for example:</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xrepo</span><span class="kv"> search vcpkg::pcre
</span>The package names:
    vcpkg::pcre:
      -&gt; vcpkg::pcre-8.44#8: Perl Compatible Regular Expressions
      -&gt; vcpkg::pcre2-10.35#2: PCRE2 is a re-working of the original Perl Compatible Regular Expressions library
</code></pre>
</div>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xrepo</span><span class="kv"> search conan::openssl
</span>The package names:
    conan::openssl:
      -&gt; conan::openssl/1.1.1g:
      -&gt; conan::openssl/1.1.1h:
</code></pre>
</div>

<h3 id="modify-the-target-file-name">Modify the target file name</h3>

<p>We know that for the modification of the target file name, we can use <code class="highlighter-rouge">set_basename</code> or use the <code class="highlighter-rouge">set_filename</code> interface to configure the implementation. The former modifies the name of the <code class="highlighter-rouge">xxx</code> part of <code class="highlighter-rouge">libxxx.so</code> and the latter can modify the complete file name.</p>

<p>But in some cases, we just want to modify: extension <code class="highlighter-rouge">.so</code>, prefix name <code class="highlighter-rouge">lib</code>, or adding suffix name such as: <code class="highlighter-rouge">libxxx-d.so</code> will be very troublesome, or use <code class="highlighter-rouge">set_filename</code> for complete modification.</p>

<p>Now, we newly provide three independent interfaces <code class="highlighter-rouge">set_prefixname</code>, <code class="highlighter-rouge">set_suffixname</code> and <code class="highlighter-rouge">set_extension</code> to configure them more flexibly.</p>

<h4 id="set-the-leading-name-of-the-target-file">Set the leading name of the target file</h4>

<p>For example, change the default: <code class="highlighter-rouge">libtest.so</code> to <code class="highlighter-rouge">test.so</code></p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">target</span><span class="p">(</span><span class="s2">"test"</span><span class="p">)</span>
    <span class="n">set_prefixname</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
</code></pre>
</div>

<h4 id="set-the-postname-of-the-target-file">Set the postname of the target file</h4>

<p>For example, change the default: <code class="highlighter-rouge">libtest.so</code> to <code class="highlighter-rouge">libtest-d.so</code></p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">target</span><span class="p">(</span><span class="s2">"test"</span><span class="p">)</span>
    <span class="n">set_suffixname</span><span class="p">(</span><span class="s2">"-d"</span><span class="p">)</span>
</code></pre>
</div>

<h4 id="set-the-extension-of-the-target-file">Set the extension of the target file</h4>

<p>For example, change the default: <code class="highlighter-rouge">libtest.so</code> to <code class="highlighter-rouge">test.dll</code></p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">target</span><span class="p">(</span><span class="s2">"test"</span><span class="p">)</span>
    <span class="n">set_prefixname</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
    <span class="n">set_extension</span><span class="p">(</span><span class="s2">".dll"</span><span class="p">)</span>
</code></pre>
</div>

<h3 id="default-target-type">Default target type</h3>

<p>In the new version, if the user does not specify the target type in the target setting <code class="highlighter-rouge">set_kind</code>, then the default is the binary program.</p>

<p>Therefore, we can achieve smaller configurations, such as:</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">target</span><span class="p">(</span><span class="s2">"test"</span><span class="p">)</span>
    <span class="n">add_files</span><span class="p">(</span><span class="s2">"src/*.c"</span><span class="p">)</span>
</code></pre>
</div>

<p>Compilation of some small projects can be completed in just two lines, or even shorter:</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">target</span><span class="p">(</span><span class="s2">"test"</span><span class="p">,</span> <span class="p">{</span><span class="n">files</span> <span class="o">=</span> <span class="s2">"src/*.c"</span><span class="p">})</span>
</code></pre>
</div>

<h3 id="new-appletvos-compilation-platform">New appletvos compilation platform</h3>

<p>We have also added a new appletvos compilation platform to support the compilation of programs on Apple’s TVOS system. All you need is:</p>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f -p appletvos
</span><span class="w">$ </span><span class="nc">xmake</span><span class="kv">
</span></code></pre>
</div>

<h3 id="import-and-export-compile-configuration">Import and export compile configuration</h3>

<p>We can also import and export the configured configuration set to facilitate the rapid migration of the configuration.</p>

<h4 id="export-configuration">Export configuration</h4>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f --export=/tmp/config.txt
</span><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f -m debug --xxx=y --export=/tmp/config.txt
</span></code></pre>
</div>

<h4 id="import-configuration">Import configuration</h4>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f --import=/tmp/config.txt
</span><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f -m debug --xxx=y --import=/tmp/config.txt
</span></code></pre>
</div>

<h4 id="export-configuration-with-menu">Export configuration (with menu)</h4>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f --menu --export=/tmp/config.txt
</span><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f --menu -m debug --xxx=y --export=/tmp/config.txt
</span></code></pre>
</div>

<h4 id="import-configuration-with-menu">Import configuration (with menu)</h4>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f --menu --import=/tmp/config.txt
</span><span class="w">$ </span><span class="nc">xmake</span><span class="kv"> f --menu -m debug --xxx=y --import=/tmp/config.txt
</span></code></pre>
</div>

<h3 id="vs2022-support">vs2022 support</h3>

<p>In addition, in the new version, we have also added support for the preview version of vs2020.</p>

<h3 id="improve-xrepo-shell-environment">Improve xrepo shell environment</h3>

<p>In the last version, we supported customizing some package configurations by adding the xmake.lua file in the current directory, and then entering a specific package shell environment.</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">add_requires</span><span class="p">(</span><span class="s2">"zlib 1.2.11"</span><span class="p">)</span>
<span class="n">add_requires</span><span class="p">(</span><span class="s2">"python 3.x"</span><span class="p">,</span> <span class="s2">"luajit"</span><span class="p">)</span>
</code></pre>
</div>

<div class="language-console highlighter-rouge"><pre class="highlight"><code><span class="w">$ </span><span class="nc">xrepo</span><span class="kv"> env shell
</span>&gt; python --version
&gt; luajit --version
</code></pre>
</div>

<p>And now, we can also configure and load the corresponding toolchain environment in xmake.lua, for example, load the VS compilation environment.</p>

<div class="language-lua highlighter-rouge"><pre class="highlight"><code><span class="n">set_toolchains</span><span class="p">(</span><span class="s2">"msvc"</span><span class="p">)</span>
</code></pre>
</div>

<h2 id="changelog">Changelog</h2>

<h3 id="new-features">New features</h3>

<ul>
  <li><a href="https://github.com/xmake-io/xmake/issues/1421">#1421</a>: Add prefix, suffix and extension options for target names</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1422">#1422</a>: Support search packages from vcpkg, conan</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1424">#1424</a>: Set binary as default target kind</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1140">#1140</a>: Add a way to ask xmake to try to download dependencies from a certain package manager</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1339">#1339</a>: Improve <code class="highlighter-rouge">xmake package</code> to generate new local/remote packages</li>
  <li>Add <code class="highlighter-rouge">appletvos</code> platform support for AppleTV, <code class="highlighter-rouge">xmake f -p appletvos</code></li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1437">#1437</a>: Add headeronly library type for package to ignore <code class="highlighter-rouge">vs_runtime</code></li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1351">#1351</a>: Support export/import current configs</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1454">#1454</a>: Support to download and install precompiled image packages from xmake-mirror</li>
</ul>

<h3 id="change">Change</h3>

<ul>
  <li><a href="https://github.com/xmake-io/xmake/issues/1425">#1425</a>: Improve tools/meson to load msvc envirnoments</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1442">#1442</a>: Support to clone package resources from git url</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1389">#1389</a>: Support to add toolchain envs to <code class="highlighter-rouge">xrepo env</code></li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1453">#1453</a>: Support to export protobuf includedirs</li>
  <li>Support vs2022</li>
</ul>

<h3 id="bugs-fixed">Bugs fixed</h3>

<ul>
  <li><a href="https://github.com/xmake-io/xmake/issues/1413">#1413</a>: Fix hangs on fetching packages</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1420">#1420</a>: Fix config and packages cache</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1445">#1445</a>: Fix WDK driver sign error</li>
  <li><a href="https://github.com/xmake-io/xmake/issues/1465">#1465</a>: Fix missing link directory</li>
</ul>


        </article>
        <hr>

        <!-- baidu ads -->
        

        
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
                    
                    <h2 id="chinese">中文</h2>
                    <ul>
                    
                    <li class="relatedPost">
                        <a href="/cn/2021/06/30/xmake-update-v2.5.5/">xmake v2.5.5 发布，支持下载集成二进制镜像包
                        
                        </a>
                    </li>
                    
                    
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
        
            
        
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
            
        
            
            
                
            
        
        
            </ul>
        

        
        
            
            
            
                
                    
                        
                        <h2 id="similar_posts">Similar Posts</h2>
                        <ul>
                        
                        <li class="relatedPost">
                            <a href="/2021/12/17/xmake-update-v2.6.2/">Xmake v2.6.2 released, Support building Linux kernel driver module
                            
                            </a>
                        </li>
                        
                        
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
            
        
            
        
            
            
            
                
                    
                        
                        <li class="relatedPost">
                            <a href="/2021/12/03/xmake-update-v2.6.1/">xmake v2.6.1 released, Switch to Lua5.4 runtime, Support Rust and C++ mixed compilation
                            
                            </a>
                        </li>
                        
                        
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
            
        
            
        
            
            
            
                
                    
                        
                        <li class="relatedPost">
                            <a href="/2021/10/30/xmake-update-v2.5.9/">xmake v2.5.9 released, Improve C++20 Modules and support Nim, Keil MDK and Unity Build
                            
                            </a>
                        </li>
                        
                        
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
            
        
            
        
            
            
            
                
                    
                        
                        <li class="relatedPost">
                            <a href="/2021/10/08/xmake-update-v2.5.8/">xmake v2.5.8 is released, Support Pascal/Swig program and Lua53 runtime
                            
                            </a>
                        </li>
                        
                        
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
            
        
            
        
            
            
            
                
                    
                        
                        <li class="relatedPost">
                            <a href="/2021/08/29/xmake-update-v2.5.7/">xmake v2.5.7 released, Use lockfile to freeze package dependencies and Vala/Metal language support
                            
                            </a>
                        </li>
                        
                        
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
                
                    
                
                    
                
                    
                
                    
                
                    
                
            
            
        
            
        
        
            </ul>
        

        <div class="post-recent">
    <div class="pre">

        

        

        
        
        

        

        

        
        
        <p><strong>Prev Post</strong> <a href="/2021/05/15/xmake-update-v2.5.4/">xmake v2.5.4 Released, Support apt/portage package manager and improve xrepo shell</a></p>
        
    </div>

    <div class="nex">

        

        

        
        
        

        

        

        
        
        <p><strong>Next Post</strong> <a href="/2021/07/26/xmake-update-v2.5.6/">xmake v2.5.6 released, Improve compatibility of pre-compiled binary package</a></p>
        
    </div>
</div>


        <h2 id="comments">Comments</h2>
        






<div id="gitalk-container"></div>
<link rel="stylesheet" href="/css/gitalk.css">
<script src="/js/gitalk.min.js"></script>

<script>
const gitalk = new Gitalk({
  clientID: '73946dc1d9e2276ad0da',
  clientSecret: '12a3cb94361ba3ebc6ecb68cf80d592bfaa8106d',
  repo: 'tboox.github.io',
  owner: 'waruqi',
  admin: ['waruqi'],
  id: location.pathname,      
  language: 'en',
  distractionFreeMode: false  
})

gitalk.render('gitalk-container')
</script>





    </div>
    <button class="anchor"><i class="fa fa-anchor"></i></button>
    <div class="right">
        <div class="wrap">


            <!-- codefund ads -->
            

            <!-- Content -->
            <div class="side content">
                <div>
                    Content
                </div>
                <ul id="content-side" class="content-ul">
                    <li><a href="#chinese">中文</a></li>
                    <li><a href="#similar_posts">Similar Posts</a></li>
                    <li><a href="#comments">Comments</a></li>
                </ul>
            </div>

            <!-- baidu ads -->
            

            <br>
            <div class="side">
                <div>
                    <i class="fa fa-external-link"></i>
                    Links
                </div>
                <ul class="content-ul">
                  <li><a href="http://github.com/waruqi/tbox">tbox</a></li>
                  <li><a href="http://www.xmake.io">xmake</a></li>
                  <li><a href="https://github.com/waruqi">github</a></li>
                </ul>
            </div> 

            <!-- google ads -->
            

            <!-- baidu ads -->
            

            <!-- chitika ads -->
            
        </div>
    </div>

    <!-- baidu ads -->
    
</div>
<script>
/**
 * target _blank
 */
(function() {
    var aTags = document.querySelectorAll('article a:not([id])')
    for (var i = 0; i < aTags.length; i++) {
        aTags[i].setAttribute('target', '_blank')
    }
}());
</script>
<script src="/js/pageContent.js " charset="utf-8"></script>



    <footer class="site-footer">
    <div class="wrapper">
        <p class="description">
             Copyright (c) 2016-2020 tboox.org 
        </p>
        <p class="contact">
            
            <a href="https://github.com/waruqi" title="GitHub"><i class="fa fa-github" aria-hidden="true"></i></a> 
             
            
            <a href="mailto:waruqi@gmail.com" title="email"><i class="fa fa-envelope-o" aria-hidden="true"></i></a> 
            
            
            <a href="https://twitter.com/waruqi" title="Twitter"><i class="fa fa-twitter" aria-hidden="true"></i></a> 
            
            <a href="/feed.xml" title="feed"><i class="fa fa-feed" aria-hidden="true"></i></a> 
        </p>
        <p class="power">
            <span>
                Site powered by <a href="https://jekyllrb.com/">Jekyll</a> & <a href="https://github.com/Gaohaoyang">HyG</a> & <a href="https://pages.github.com/">Github Pages</a>.
            </span>
        </p>
    </div>
</footer>

    <div class="back-to-top">
    <a href="#top" class="scroll">
        <i class="fa fa-arrow-up" aria-hidden="true"></i>
    </a>
</div>

    <script src=" /js/main.js " charset="utf-8"></script>
    <script src=" /js/scroll.min.js " charset="utf-8"></script>
  </body>

</html>
